<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1999-2023 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>_gfortran_caf_event_wait (The GNU Fortran Compiler)</title>

<meta name="description" content="_gfortran_caf_event_wait (The GNU Fortran Compiler)">
<meta name="keywords" content="_gfortran_caf_event_wait (The GNU Fortran Compiler)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<link href="index.html#Top" rel="start" title="Top">
<link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Function-ABI-Documentation.html#Function-ABI-Documentation" rel="up" title="Function ABI Documentation">
<link href="_005fgfortran_005fcaf_005fevent_005fquery.html#g_t_005fgfortran_005fcaf_005fevent_005fquery" rel="next" title="_gfortran_caf_event_query">
<link href="_005fgfortran_005fcaf_005fevent_005fpost.html#g_t_005fgfortran_005fcaf_005fevent_005fpost" rel="prev" title="_gfortran_caf_event_post">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en">
<a name="g_t_005fgfortran_005fcaf_005fevent_005fwait"></a>
<div class="header">
<p>
Next: <a href="_005fgfortran_005fcaf_005fevent_005fquery.html#g_t_005fgfortran_005fcaf_005fevent_005fquery" accesskey="n" rel="next">_gfortran_caf_event_query</a>, Previous: <a href="_005fgfortran_005fcaf_005fevent_005fpost.html#g_t_005fgfortran_005fcaf_005fevent_005fpost" accesskey="p" rel="prev">_gfortran_caf_event_post</a>, Up: <a href="Function-ABI-Documentation.html#Function-ABI-Documentation" accesskey="u" rel="up">Function ABI Documentation</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="g_t_005fgfortran_005fcaf_005fevent_005fwait-_002d_002d_002d-Wait-that-an-event-occurred"></a>
<h4 class="subsection">7.2.20 <code>_gfortran_caf_event_wait</code> &mdash; Wait that an event occurred</h4>
<a name="index-Coarray_002c-_005fgfortran_005fcaf_005fevent_005fwait"></a>

<dl compact="compact">
<dt><em>Description</em>:</dt>
<dd><p>Wait until the event count has reached at least the specified
<var>until_count</var>; if so, atomically decrement the event variable by this
amount and return.
</p>
</dd>
<dt><em>Syntax</em>:</dt>
<dd><p><code>void _gfortran_caf_event_wait (caf_token_t token, size_t index,
int until_count, int *stat, char *errmsg, size_t errmsg_len)</code>
</p>
</dd>
<dt><em>Arguments</em>:</dt>
<dd><table>
<tr><td width="15%"><var>token</var></td><td width="70%">intent(in)  An opaque pointer identifying the coarray.</td></tr>
<tr><td width="15%"><var>index</var></td><td width="70%">intent(in)  Array index; first array index is 0.  For
scalars, it is always 0.</td></tr>
<tr><td width="15%"><var>until_count</var></td><td width="70%">intent(in)  The number of events which have to be
available before the function returns.</td></tr>
<tr><td width="15%"><var>stat</var></td><td width="70%">intent(out)  Stores the STAT=; may be NULL.</td></tr>
<tr><td width="15%"><var>errmsg</var></td><td width="70%">intent(out)  When an error occurs, this will be set to
an error message; may be NULL.</td></tr>
<tr><td width="15%"><var>errmsg_len</var></td><td width="70%">intent(in)  the buffer size of errmsg</td></tr>
</table>

</dd>
<dt><em>NOTES</em></dt>
<dd><p>This function only operates on a local coarray. It acts like a loop checking
atomically the value of the event variable, breaking if the value is greater
or equal the requested number of counts. Before the function returns, the
event variable has to be decremented by the requested <var>until_count</var> value.
A possible implementation would be a busy loop for a certain number of spins
(possibly depending on the number of threads relative to the number of available
cores) followed by another waiting strategy such as a sleeping wait (possibly
with an increasing number of sleep time) or, if possible, a futex wait.
</p>
<p>The statement is an image-control statement but does not imply sync memory.
Still, all preceeding push communications of this image to the specified
remote image have to be completed before <code>event_wait</code> on the remote
image returns.
</p></dd>
</dl>



<hr>
<div class="header">
<p>
Next: <a href="_005fgfortran_005fcaf_005fevent_005fquery.html#g_t_005fgfortran_005fcaf_005fevent_005fquery" accesskey="n" rel="next">_gfortran_caf_event_query</a>, Previous: <a href="_005fgfortran_005fcaf_005fevent_005fpost.html#g_t_005fgfortran_005fcaf_005fevent_005fpost" accesskey="p" rel="prev">_gfortran_caf_event_post</a>, Up: <a href="Function-ABI-Documentation.html#Function-ABI-Documentation" accesskey="u" rel="up">Function ABI Documentation</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>
